import fs from 'fs';

// fs.readdir('./', (err, data) => {
//     if (err) {
//         console.log(err);
//     } else {
//         console.log(data);
//     }
// })

/*
一、读取指定文件夹，列出所有的文件或者文件夹
二、遍历这些文件或者文件夹，判断是否文件夹，是，则继续调用读取文件夹的方法
三、一直重复第二步，直到将所有的内容都列出

*/


function listAllFile(filePath) {
    let resArr = [];
    /*
        1.判断是否为文件夹，如果不是，则直接返回文件名称
        2.如果是文件夹，则列出其下所有的内容（文件、文件夹）
        3.如果列出的内容中某个项目是文件夹，则继续深入列出其下所有的内容
    */

    // 使用同步方法，获得指定路径的状态
    let fileStat = fs.statSync(filePath);
    // 利用状态，判断是否为文件
    let isPathFile = fileStat.isFile();

    // 如果是文件，则直接放入结果数组
    if (isPathFile) {
        //调用数组的push方法，将一个对象插入到数组的尾部
        resArr.push(filePath);
    } else {
        // 如果是文件夹，则利用readdirSync方法，读取目录中的所有的内容（包含文件和文件夹）
        let arr = fs.readdirSync(filePath);

        // 遍历目录下的所有内容项目，再利用当前方法listAllFile来处理对应路径的信息（重点理解）
        arr.forEach(item => {
            // 判断filePath最后一个字符是否为/
            let lastStrIs = filePath.lastIndexOf('/') === filePath.length - 1;
            // filePath如果最后一个是/，那么就和item直接拼接就可以，否则需要再加一个/
            let tmpPath = lastStrIs ? filePath + item : `${filePath}/${item}`;
            // 拿到处理好的路径以后，直接调用listAllfile函数继续处理,拿到的结果tmpArr和原结果resArr合并，
            // 再重新赋值给原结果resArr
            let tmpArr = listAllFile(tmpPath);
            resArr=resArr.concat(tmpArr);
        })
    }
    // 返回最终结果
    return resArr;

}


let arr=listAllFile('./');
console.log(arr);